// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Cloud Machine Learning Engine Version v1beta1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/ml/'>Google Cloud Machine Learning Engine</a>
 *      <tr><th>API Version<td>v1beta1
 *      <tr><th>API Rev<td>20170316 (805)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/ml/'>
 *              https://cloud.google.com/ml/</a>
 *      <tr><th>Discovery Name<td>ml
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Cloud Machine Learning Engine can be found at
 * <a href='https://cloud.google.com/ml/'>https://cloud.google.com/ml/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.CloudMachineLearningEngine.v1beta1
{
    /// <summary>The CloudMachineLearningEngine Service.</summary>
    public class CloudMachineLearningEngineService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1beta1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public CloudMachineLearningEngineService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public CloudMachineLearningEngineService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            projects = new ProjectsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "ml"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://ml.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Cloud Machine Learning Engine.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

        }



        private readonly ProjectsResource projects;

        /// <summary>Gets the Projects resource.</summary>
        public virtual ProjectsResource Projects
        {
            get { return projects; }
        }
    }

    ///<summary>A base abstract class for CloudMachineLearningEngine requests.</summary>
    public abstract class CloudMachineLearningEngineBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new CloudMachineLearningEngineBaseServiceRequest instance.</summary>
        protected CloudMachineLearningEngineBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes CloudMachineLearningEngine parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "projects" collection of methods.</summary>
    public class ProjectsResource
    {
        private const string Resource = "projects";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ProjectsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            jobs = new JobsResource(service);
            models = new ModelsResource(service);
            operations = new OperationsResource(service);

        }

        private readonly JobsResource jobs;

        /// <summary>Gets the Jobs resource.</summary>
        public virtual JobsResource Jobs
        {
            get { return jobs; }
        }

        /// <summary>The "jobs" collection of methods.</summary>
        public class JobsResource
        {
            private const string Resource = "jobs";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public JobsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Cancels a running job.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="name">Required. The name of the job to cancel.
            ///
            /// Authorization: requires `Editor` role on the parent project.</param>
            public virtual CancelRequest Cancel(Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1CancelJobRequest body, string name)
            {
                return new CancelRequest(service, body, name);
            }

            /// <summary>Cancels a running job.</summary>
            public class CancelRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleProtobufEmpty>
            {
                /// <summary>Constructs a new Cancel request.</summary>
                public CancelRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1CancelJobRequest body, string name)
                    : base(service)
                {
                    Name = name;
                    Body = body;
                    InitParameters();
                }


                /// <summary>Required. The name of the job to cancel.
                ///
                /// Authorization: requires `Editor` role on the parent project.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1CancelJobRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "cancel"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}:cancel"; }
                }

                /// <summary>Initializes Cancel parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/jobs/[^/]+$",
                        });
                }

            }

            /// <summary>Creates a training or a batch prediction job.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="parent">Required. The project name.
            ///
            /// Authorization: requires `Editor` role on the specified project.</param>
            public virtual CreateRequest Create(Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Job body, string parent)
            {
                return new CreateRequest(service, body, parent);
            }

            /// <summary>Creates a training or a batch prediction job.</summary>
            public class CreateRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Job>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Job body, string parent)
                    : base(service)
                {
                    Parent = parent;
                    Body = body;
                    InitParameters();
                }


                /// <summary>Required. The project name.
                ///
                /// Authorization: requires `Editor` role on the specified project.</summary>
                [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Parent { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Job Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+parent}/jobs"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+$",
                        });
                }

            }

            /// <summary>Describes a job.</summary>
            /// <param name="name">Required. The name of the job to get the description of.
            ///
            /// Authorization: requires `Viewer` role on the parent project.</param>
            public virtual GetRequest Get(string name)
            {
                return new GetRequest(service, name);
            }

            /// <summary>Describes a job.</summary>
            public class GetRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Job>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>Required. The name of the job to get the description of.
                ///
                /// Authorization: requires `Viewer` role on the parent project.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/jobs/[^/]+$",
                        });
                }

            }

            /// <summary>Lists the jobs in the project.</summary>
            /// <param name="parent">Required. The name of the project for which to list jobs.
            ///
            /// Authorization: requires `Viewer` role on the specified project.</param>
            public virtual ListRequest List(string parent)
            {
                return new ListRequest(service, parent);
            }

            /// <summary>Lists the jobs in the project.</summary>
            public class ListRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1ListJobsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string parent)
                    : base(service)
                {
                    Parent = parent;
                    InitParameters();
                }


                /// <summary>Required. The name of the project for which to list jobs.
                ///
                /// Authorization: requires `Viewer` role on the specified project.</summary>
                [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Parent { get; private set; }

                /// <summary>Optional. Specifies the subset of jobs to retrieve.</summary>
                [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Filter { get; set; }

                /// <summary>Optional. A page token to request the next page of results.
                ///
                /// You get the token from the `next_page_token` field of the response from the previous call.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>Optional. The number of jobs to retrieve per "page" of results. If there are more remaining
                /// results than this number, the response message will contain a valid value in the `next_page_token`
                /// field.
                ///
                /// The default value is 20, and the maximum page size is 100.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+parent}/jobs"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+$",
                        });
                    RequestParameters.Add(
                        "filter", new Google.Apis.Discovery.Parameter
                        {
                            Name = "filter",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly ModelsResource models;

        /// <summary>Gets the Models resource.</summary>
        public virtual ModelsResource Models
        {
            get { return models; }
        }

        /// <summary>The "models" collection of methods.</summary>
        public class ModelsResource
        {
            private const string Resource = "models";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public ModelsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
                versions = new VersionsResource(service);

            }

            private readonly VersionsResource versions;

            /// <summary>Gets the Versions resource.</summary>
            public virtual VersionsResource Versions
            {
                get { return versions; }
            }

            /// <summary>The "versions" collection of methods.</summary>
            public class VersionsResource
            {
                private const string Resource = "versions";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public VersionsResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Creates a new version of a model from a trained TensorFlow model.
                ///
                /// If the version created in the cloud by this call is the first deployed version of the specified
                /// model, it will be made the default version of the model. When you add a version to a model that
                /// already has one or more versions, the default version does not automatically change. If you want a
                /// new version to be the default, you must call [projects.models.versions.setDefault](/ml/reference/res
                /// t/v1beta1/projects.models.versions/setDefault).</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="parent">Required. The name of the model.
                ///
                /// Authorization: requires `Editor` role on the parent project.</param>
                public virtual CreateRequest Create(Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Version body, string parent)
                {
                    return new CreateRequest(service, body, parent);
                }

                /// <summary>Creates a new version of a model from a trained TensorFlow model.
                ///
                /// If the version created in the cloud by this call is the first deployed version of the specified
                /// model, it will be made the default version of the model. When you add a version to a model that
                /// already has one or more versions, the default version does not automatically change. If you want a
                /// new version to be the default, you must call [projects.models.versions.setDefault](/ml/reference/res
                /// t/v1beta1/projects.models.versions/setDefault).</summary>
                public class CreateRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleLongrunningOperation>
                {
                    /// <summary>Constructs a new Create request.</summary>
                    public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Version body, string parent)
                        : base(service)
                    {
                        Parent = parent;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>Required. The name of the model.
                    ///
                    /// Authorization: requires `Editor` role on the parent project.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Version Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "create"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+parent}/versions"; }
                    }

                    /// <summary>Initializes Create parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "parent", new Google.Apis.Discovery.Parameter
                            {
                                Name = "parent",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/models/[^/]+$",
                            });
                    }

                }

                /// <summary>Deletes a model version.
                ///
                /// Each model can have multiple versions deployed and in use at any given time. Use this method to
                /// remove a single version.
                ///
                /// Note: You cannot delete the version that is set as the default version of the model unless it is the
                /// only remaining version.</summary>
                /// <param name="name">Required. The name of the version. You can get the names of all the versions of a model by
                /// calling [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).
                ///
                /// Authorization: requires `Editor` role on the parent project.</param>
                public virtual DeleteRequest Delete(string name)
                {
                    return new DeleteRequest(service, name);
                }

                /// <summary>Deletes a model version.
                ///
                /// Each model can have multiple versions deployed and in use at any given time. Use this method to
                /// remove a single version.
                ///
                /// Note: You cannot delete the version that is set as the default version of the model unless it is the
                /// only remaining version.</summary>
                public class DeleteRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleLongrunningOperation>
                {
                    /// <summary>Constructs a new Delete request.</summary>
                    public DeleteRequest(Google.Apis.Services.IClientService service, string name)
                        : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }


                    /// <summary>Required. The name of the version. You can get the names of all the versions of a model
                    /// by calling
                    /// [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).
                    ///
                    /// Authorization: requires `Editor` role on the parent project.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "delete"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "DELETE"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}"; }
                    }

                    /// <summary>Initializes Delete parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/models/[^/]+/versions/[^/]+$",
                            });
                    }

                }

                /// <summary>Gets information about a model version.
                ///
                /// Models can have multiple versions. You can call
                /// [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list) to get the
                /// same information that this method returns for all of the versions of a model.</summary>
                /// <param name="name">Required. The name of the version.
                ///
                /// Authorization: requires `Viewer` role on the parent project.</param>
                public virtual GetRequest Get(string name)
                {
                    return new GetRequest(service, name);
                }

                /// <summary>Gets information about a model version.
                ///
                /// Models can have multiple versions. You can call
                /// [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list) to get the
                /// same information that this method returns for all of the versions of a model.</summary>
                public class GetRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Version>
                {
                    /// <summary>Constructs a new Get request.</summary>
                    public GetRequest(Google.Apis.Services.IClientService service, string name)
                        : base(service)
                    {
                        Name = name;
                        InitParameters();
                    }


                    /// <summary>Required. The name of the version.
                    ///
                    /// Authorization: requires `Viewer` role on the parent project.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "get"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}"; }
                    }

                    /// <summary>Initializes Get parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/models/[^/]+/versions/[^/]+$",
                            });
                    }

                }

                /// <summary>Gets basic information about all the versions of a model.
                ///
                /// If you expect that a model has a lot of versions, or if you need to handle only a limited number of
                /// results at a time, you can request that the list be retrieved in batches (called pages):</summary>
                /// <param name="parent">Required. The name of the model for which to list the version.
                ///
                /// Authorization: requires `Viewer` role on the parent project.</param>
                public virtual ListRequest List(string parent)
                {
                    return new ListRequest(service, parent);
                }

                /// <summary>Gets basic information about all the versions of a model.
                ///
                /// If you expect that a model has a lot of versions, or if you need to handle only a limited number of
                /// results at a time, you can request that the list be retrieved in batches (called pages):</summary>
                public class ListRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1ListVersionsResponse>
                {
                    /// <summary>Constructs a new List request.</summary>
                    public ListRequest(Google.Apis.Services.IClientService service, string parent)
                        : base(service)
                    {
                        Parent = parent;
                        InitParameters();
                    }


                    /// <summary>Required. The name of the model for which to list the version.
                    ///
                    /// Authorization: requires `Viewer` role on the parent project.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Parent { get; private set; }

                    /// <summary>Optional. A page token to request the next page of results.
                    ///
                    /// You get the token from the `next_page_token` field of the response from the previous
                    /// call.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// <summary>Optional. The number of versions to retrieve per "page" of results. If there are more
                    /// remaining results than this number, the response message will contain a valid value in the
                    /// `next_page_token` field.
                    ///
                    /// The default value is 20, and the maximum page size is 100.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "list"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+parent}/versions"; }
                    }

                    /// <summary>Initializes List parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "parent", new Google.Apis.Discovery.Parameter
                            {
                                Name = "parent",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/models/[^/]+$",
                            });
                        RequestParameters.Add(
                            "pageToken", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageToken",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageSize", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageSize",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Designates a version to be the default for the model.
                ///
                /// The default version is used for prediction requests made against the model that don't specify a
                /// version.
                ///
                /// The first version to be created for a model is automatically set as the default. You must make any
                /// subsequent changes to the default version setting manually using this method.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="name">Required. The name of the version to make the default for the model. You can get the names of all
                /// the versions of a model by calling
                /// [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).
                ///
                /// Authorization: requires `Editor` role on the parent project.</param>
                public virtual SetDefaultRequest SetDefault(Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1SetDefaultVersionRequest body, string name)
                {
                    return new SetDefaultRequest(service, body, name);
                }

                /// <summary>Designates a version to be the default for the model.
                ///
                /// The default version is used for prediction requests made against the model that don't specify a
                /// version.
                ///
                /// The first version to be created for a model is automatically set as the default. You must make any
                /// subsequent changes to the default version setting manually using this method.</summary>
                public class SetDefaultRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Version>
                {
                    /// <summary>Constructs a new SetDefault request.</summary>
                    public SetDefaultRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1SetDefaultVersionRequest body, string name)
                        : base(service)
                    {
                        Name = name;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>Required. The name of the version to make the default for the model. You can get the
                    /// names of all the versions of a model by calling
                    /// [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).
                    ///
                    /// Authorization: requires `Editor` role on the parent project.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Name { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1SetDefaultVersionRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "setDefault"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1beta1/{+name}:setDefault"; }
                    }

                    /// <summary>Initializes SetDefault parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "name", new Google.Apis.Discovery.Parameter
                            {
                                Name = "name",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = @"^projects/[^/]+/models/[^/]+/versions/[^/]+$",
                            });
                    }

                }
            }

            /// <summary>Creates a model which will later contain one or more versions.
            ///
            /// You must add at least one version before you can request predictions from the model. Add versions by
            /// calling
            /// [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create).</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="parent">Required. The project name.
            ///
            /// Authorization: requires `Editor` role on the specified project.</param>
            public virtual CreateRequest Create(Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Model body, string parent)
            {
                return new CreateRequest(service, body, parent);
            }

            /// <summary>Creates a model which will later contain one or more versions.
            ///
            /// You must add at least one version before you can request predictions from the model. Add versions by
            /// calling
            /// [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create).</summary>
            public class CreateRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Model>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Model body, string parent)
                    : base(service)
                {
                    Parent = parent;
                    Body = body;
                    InitParameters();
                }


                /// <summary>Required. The project name.
                ///
                /// Authorization: requires `Editor` role on the specified project.</summary>
                [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Parent { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Model Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+parent}/models"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+$",
                        });
                }

            }

            /// <summary>Deletes a model.
            ///
            /// You can only delete a model if there are no versions in it. You can delete versions by calling
            /// [projects.models.versions.delete](/ml/reference/rest/v1beta1/projects.models.versions/delete).</summary>
            /// <param name="name">Required. The name of the model.
            ///
            /// Authorization: requires `Editor` role on the parent project.</param>
            public virtual DeleteRequest Delete(string name)
            {
                return new DeleteRequest(service, name);
            }

            /// <summary>Deletes a model.
            ///
            /// You can only delete a model if there are no versions in it. You can delete versions by calling
            /// [projects.models.versions.delete](/ml/reference/rest/v1beta1/projects.models.versions/delete).</summary>
            public class DeleteRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleLongrunningOperation>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>Required. The name of the model.
                ///
                /// Authorization: requires `Editor` role on the parent project.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "delete"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "DELETE"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}"; }
                }

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/models/[^/]+$",
                        });
                }

            }

            /// <summary>Gets information about a model, including its name, the description (if set), and the default
            /// version (if at least one version of the model has been deployed).</summary>
            /// <param name="name">Required. The name of the model.
            ///
            /// Authorization: requires `Viewer` role on the parent project.</param>
            public virtual GetRequest Get(string name)
            {
                return new GetRequest(service, name);
            }

            /// <summary>Gets information about a model, including its name, the description (if set), and the default
            /// version (if at least one version of the model has been deployed).</summary>
            public class GetRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1Model>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>Required. The name of the model.
                ///
                /// Authorization: requires `Viewer` role on the parent project.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/models/[^/]+$",
                        });
                }

            }

            /// <summary>Lists the models in a project.
            ///
            /// Each project can contain multiple models, and each model can have multiple versions.</summary>
            /// <param name="parent">Required. The name of the project whose models are to be listed.
            ///
            /// Authorization: requires `Viewer` role on the specified project.</param>
            public virtual ListRequest List(string parent)
            {
                return new ListRequest(service, parent);
            }

            /// <summary>Lists the models in a project.
            ///
            /// Each project can contain multiple models, and each model can have multiple versions.</summary>
            public class ListRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1ListModelsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string parent)
                    : base(service)
                {
                    Parent = parent;
                    InitParameters();
                }


                /// <summary>Required. The name of the project whose models are to be listed.
                ///
                /// Authorization: requires `Viewer` role on the specified project.</summary>
                [Google.Apis.Util.RequestParameterAttribute("parent", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Parent { get; private set; }

                /// <summary>Optional. A page token to request the next page of results.
                ///
                /// You get the token from the `next_page_token` field of the response from the previous call.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>Optional. The number of models to retrieve per "page" of results. If there are more
                /// remaining results than this number, the response message will contain a valid value in the
                /// `next_page_token` field.
                ///
                /// The default value is 20, and the maximum page size is 100.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+parent}/models"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "parent", new Google.Apis.Discovery.Parameter
                        {
                            Name = "parent",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+$",
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly OperationsResource operations;

        /// <summary>Gets the Operations resource.</summary>
        public virtual OperationsResource Operations
        {
            get { return operations; }
        }

        /// <summary>The "operations" collection of methods.</summary>
        public class OperationsResource
        {
            private const string Resource = "operations";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public OperationsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Starts asynchronous cancellation on a long-running operation.  The server makes a best effort
            /// to cancel the operation, but success is not guaranteed.  If the server doesn't support this method, it
            /// returns `google.rpc.Code.UNIMPLEMENTED`.  Clients can use Operations.GetOperation or other methods to
            /// check whether the cancellation succeeded or whether the operation completed despite cancellation. On
            /// successful cancellation, the operation is not deleted; instead, it becomes an operation with an
            /// Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.</summary>
            /// <param name="name">The name of the operation resource to be cancelled.</param>
            public virtual CancelRequest Cancel(string name)
            {
                return new CancelRequest(service, name);
            }

            /// <summary>Starts asynchronous cancellation on a long-running operation.  The server makes a best effort
            /// to cancel the operation, but success is not guaranteed.  If the server doesn't support this method, it
            /// returns `google.rpc.Code.UNIMPLEMENTED`.  Clients can use Operations.GetOperation or other methods to
            /// check whether the cancellation succeeded or whether the operation completed despite cancellation. On
            /// successful cancellation, the operation is not deleted; instead, it becomes an operation with an
            /// Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.</summary>
            public class CancelRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleProtobufEmpty>
            {
                /// <summary>Constructs a new Cancel request.</summary>
                public CancelRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The name of the operation resource to be cancelled.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "cancel"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}:cancel"; }
                }

                /// <summary>Initializes Cancel parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/operations/[^/]+$",
                        });
                }

            }

            /// <summary>Deletes a long-running operation. This method indicates that the client is no longer interested
            /// in the operation result. It does not cancel the operation. If the server doesn't support this method, it
            /// returns `google.rpc.Code.UNIMPLEMENTED`.</summary>
            /// <param name="name">The name of the operation resource to be deleted.</param>
            public virtual DeleteRequest Delete(string name)
            {
                return new DeleteRequest(service, name);
            }

            /// <summary>Deletes a long-running operation. This method indicates that the client is no longer interested
            /// in the operation result. It does not cancel the operation. If the server doesn't support this method, it
            /// returns `google.rpc.Code.UNIMPLEMENTED`.</summary>
            public class DeleteRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleProtobufEmpty>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The name of the operation resource to be deleted.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "delete"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "DELETE"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}"; }
                }

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/operations/[^/]+$",
                        });
                }

            }

            /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
            /// operation result at intervals as recommended by the API service.</summary>
            /// <param name="name">The name of the operation resource.</param>
            public virtual GetRequest Get(string name)
            {
                return new GetRequest(service, name);
            }

            /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
            /// operation result at intervals as recommended by the API service.</summary>
            public class GetRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleLongrunningOperation>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The name of the operation resource.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+/operations/[^/]+$",
                        });
                }

            }

            /// <summary>Lists operations that match the specified filter in the request. If the server doesn't support
            /// this method, it returns `UNIMPLEMENTED`.
            ///
            /// NOTE: the `name` binding below allows API services to override the binding to use different resource
            /// name schemes, such as `users/operations`.</summary>
            /// <param name="name">The name of the operation collection.</param>
            public virtual ListRequest List(string name)
            {
                return new ListRequest(service, name);
            }

            /// <summary>Lists operations that match the specified filter in the request. If the server doesn't support
            /// this method, it returns `UNIMPLEMENTED`.
            ///
            /// NOTE: the `name` binding below allows API services to override the binding to use different resource
            /// name schemes, such as `users/operations`.</summary>
            public class ListRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleLongrunningListOperationsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string name)
                    : base(service)
                {
                    Name = name;
                    InitParameters();
                }


                /// <summary>The name of the operation collection.</summary>
                [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Name { get; private set; }

                /// <summary>The standard list page size.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>The standard list filter.</summary>
                [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Filter { get; set; }

                /// <summary>The standard list page token.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+name}/operations"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "name", new Google.Apis.Discovery.Parameter
                        {
                            Name = "name",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^projects/[^/]+$",
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "filter", new Google.Apis.Discovery.Parameter
                        {
                            Name = "filter",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Get the service account information associated with your project. You need this information in
        /// order to grant the service account persmissions for the Google Cloud Storage location where you put your
        /// model training code for training the model with Google Cloud Machine Learning.</summary>
        /// <param name="name">Required. The project name.
        ///
        /// Authorization: requires `Viewer` role on the specified project.</param>
        public virtual GetConfigRequest GetConfig(string name)
        {
            return new GetConfigRequest(service, name);
        }

        /// <summary>Get the service account information associated with your project. You need this information in
        /// order to grant the service account persmissions for the Google Cloud Storage location where you put your
        /// model training code for training the model with Google Cloud Machine Learning.</summary>
        public class GetConfigRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1GetConfigResponse>
        {
            /// <summary>Constructs a new GetConfig request.</summary>
            public GetConfigRequest(Google.Apis.Services.IClientService service, string name)
                : base(service)
            {
                Name = name;
                InitParameters();
            }


            /// <summary>Required. The project name.
            ///
            /// Authorization: requires `Viewer` role on the specified project.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Name { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getConfig"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+name}:getConfig"; }
            }

            /// <summary>Initializes GetConfig parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^projects/[^/]+$",
                    });
            }

        }

        /// <summary>Performs prediction on the data in the request.
        ///
        /// **** REMOVE FROM GENERATED DOCUMENTATION</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="name">Required. The resource name of a model or a version.
        ///
        /// Authorization: requires `Viewer` role on the parent project.</param>
        public virtual PredictRequest Predict(Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1PredictRequest body, string name)
        {
            return new PredictRequest(service, body, name);
        }

        /// <summary>Performs prediction on the data in the request.
        ///
        /// **** REMOVE FROM GENERATED DOCUMENTATION</summary>
        public class PredictRequest : CloudMachineLearningEngineBaseServiceRequest<Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleApiHttpBody>
        {
            /// <summary>Constructs a new Predict request.</summary>
            public PredictRequest(Google.Apis.Services.IClientService service, Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1PredictRequest body, string name)
                : base(service)
            {
                Name = name;
                Body = body;
                InitParameters();
            }


            /// <summary>Required. The resource name of a model or a version.
            ///
            /// Authorization: requires `Viewer` role on the parent project.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Name { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.CloudMachineLearningEngine.v1beta1.Data.GoogleCloudMlV1beta1PredictRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "predict"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+name}:predict"; }
            }

            /// <summary>Initializes Predict parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^projects/.+$",
                    });
            }

        }
    }
}

namespace Google.Apis.CloudMachineLearningEngine.v1beta1.Data
{    

    /// <summary>Message that represents an arbitrary HTTP body. It should only be used for payload formats that can't
    /// be represented as JSON, such as raw binary or an HTML page.
    ///
    /// This message can be used both in streaming and non-streaming API methods in the request as well as the response.
    ///
    /// It can be used as a top-level request field, which is convenient if one wants to extract parameters from either
    /// the URL or HTTP template into the request fields and also want access to the raw HTTP body.
    ///
    /// Example:
    ///
    /// message GetResourceRequest { // A unique request id. string request_id = 1;
    ///
    /// // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; }
    ///
    /// service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc
    /// UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); }
    ///
    /// Example with streaming methods:
    ///
    /// service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc
    /// UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); }
    ///
    /// Use of this type only changes how the request and response bodies are handled, all other features will continue
    /// to work unchanged.</summary>
    public class GoogleApiHttpBody : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The HTTP Content-Type string representing the content type of the body.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentType")]
        public virtual string ContentType { get; set; } 

        /// <summary>HTTP body binary data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("data")]
        public virtual string Data { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Options for manually scaling a model.</summary>
    public class GoogleCloudMlV1ManualScaling : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of nodes to allocate for this model. These nodes are always up, starting from the time
        /// the model is deployed, so the cost of operating this model will be proportional to nodes * number of hours
        /// since deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nodes")]
        public virtual System.Nullable<int> Nodes { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents the metadata of the long-running operation.</summary>
    public class GoogleCloudMlV1OperationMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The time the operation was submitted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>The time operation processing completed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual object EndTime { get; set; } 

        /// <summary>Indicates whether a request to cancel this operation has been made.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isCancellationRequested")]
        public virtual System.Nullable<bool> IsCancellationRequested { get; set; } 

        /// <summary>Contains the name of the model associated with the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("modelName")]
        public virtual string ModelName { get; set; } 

        /// <summary>The operation type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationType")]
        public virtual string OperationType { get; set; } 

        /// <summary>The time operation processing started.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual object StartTime { get; set; } 

        /// <summary>Contains the version associated with the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual GoogleCloudMlV1Version Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a version of the model.
    ///
    /// Each version is a trained model deployed in the cloud, ready to handle prediction requests. A model can have
    /// multiple versions. You can get information about all of the versions of a given model by calling
    /// [projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list).</summary>
    public class GoogleCloudMlV1Version : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Output only. The time the version was created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>Required. The Google Cloud Storage location of the trained model used to create the version. See
        /// the [overview of model deployment](/ml/docs/concepts/deployment-overview) for more informaiton.
        ///
        /// When passing Version to
        /// [projects.models.versions.create](/ml/reference/rest/v1/projects.models.versions/create) the model service
        /// uses the specified location as the source of the model. Once deployed, the model version is hosted by the
        /// prediction service, so this location is useful only as a historical record.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deploymentUri")]
        public virtual string DeploymentUri { get; set; } 

        /// <summary>Optional. The description specified for the version when it was created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Output only. If true, this version will be used to handle prediction requests that do not specify a
        /// version.
        ///
        /// You can change the default version by calling
        /// [projects.methods.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isDefault")]
        public virtual System.Nullable<bool> IsDefault { get; set; } 

        /// <summary>Output only. The time the version was last used for prediction.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lastUseTime")]
        public virtual object LastUseTime { get; set; } 

        /// <summary>Optional. Manually select the number of nodes to use for serving the model. If unset (i.e., by
        /// default), the number of nodes used to serve the model automatically scales with traffic. However, care
        /// should be taken to ramp up traffic according to the model's ability to scale. If your model needs to handle
        /// bursts of traffic beyond it's ability to scale, it is recommended you set this field
        /// appropriately.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("manualScaling")]
        public virtual GoogleCloudMlV1ManualScaling ManualScaling { get; set; } 

        /// <summary>Required.The name specified for the version when it was created.
        ///
        /// The version name must be unique within the model it is created in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Optional. The Google Cloud ML runtime version to use for this deployment. If not set, Google Cloud
        /// ML will choose a version.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("runtimeVersion")]
        public virtual string RuntimeVersion { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for the CancelJob method.</summary>
    public class GoogleCloudMlV1beta1CancelJobRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Returns service account information associated with a project.</summary>
    public class GoogleCloudMlV1beta1GetConfigResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The service account Cloud ML uses to access resources in the project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceAccount")]
        public virtual string ServiceAccount { get; set; } 

        /// <summary>The project number for `service_account`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceAccountProject")]
        public virtual System.Nullable<long> ServiceAccountProject { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents the result of a single hyperparameter tuning trial from a training job. The TrainingOutput
    /// object that is returned on successful completion of a training job with hyperparameter tuning includes a list of
    /// HyperparameterOutput objects, one for each successful trial.</summary>
    public class GoogleCloudMlV1beta1HyperparameterOutput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>All recorded object metrics for this trial.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allMetrics")]
        public virtual System.Collections.Generic.IList<GoogleCloudMlV1beta1HyperparameterOutputHyperparameterMetric> AllMetrics { get; set; } 

        /// <summary>The final objective metric seen for this trial.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("finalMetric")]
        public virtual GoogleCloudMlV1beta1HyperparameterOutputHyperparameterMetric FinalMetric { get; set; } 

        /// <summary>The hyperparameters given to this trial.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hyperparameters")]
        public virtual System.Collections.Generic.IDictionary<string,string> Hyperparameters { get; set; } 

        /// <summary>The trial id for these results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trialId")]
        public virtual string TrialId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An observed value of a metric.</summary>
    public class GoogleCloudMlV1beta1HyperparameterOutputHyperparameterMetric : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The objective value at this training step.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("objectiveValue")]
        public virtual System.Nullable<double> ObjectiveValue { get; set; } 

        /// <summary>The global training step for this metric.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trainingStep")]
        public virtual System.Nullable<long> TrainingStep { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a set of hyperparameters to optimize.</summary>
    public class GoogleCloudMlV1beta1HyperparameterSpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The type of goal to use for tuning. Available types are `MAXIMIZE` and `MINIMIZE`.
        ///
        /// Defaults to `MAXIMIZE`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("goal")]
        public virtual string Goal { get; set; } 

        /// <summary>Optional. The Tensorflow summary tag name to use for optimizing trials. For current versions of
        /// Tensorflow, this tag name should exactly match what is shown in Tensorboard, including all scopes.  For
        /// versions of Tensorflow prior to 0.12, this should be only the tag passed to tf.Summary. By default,
        /// "training/hptuning/metric" will be used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hyperparameterMetricTag")]
        public virtual string HyperparameterMetricTag { get; set; } 

        /// <summary>Optional. The number of training trials to run concurrently. You can reduce the time it takes to
        /// perform hyperparameter tuning by adding trials in parallel. However, each trail only benefits from the
        /// information gained in completed trials. That means that a trial does not get access to the results of trials
        /// running at the same time, which could reduce the quality of the overall optimization.
        ///
        /// Each trial will use the same scale tier and machine types.
        ///
        /// Defaults to one.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxParallelTrials")]
        public virtual System.Nullable<int> MaxParallelTrials { get; set; } 

        /// <summary>Optional. How many training trials should be attempted to optimize the specified hyperparameters.
        ///
        /// Defaults to one.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxTrials")]
        public virtual System.Nullable<int> MaxTrials { get; set; } 

        /// <summary>Required. The set of parameters to tune.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("params")]
        public virtual System.Collections.Generic.IList<GoogleCloudMlV1beta1ParameterSpec> Params__ { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a training or prediction job.</summary>
    public class GoogleCloudMlV1beta1Job : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Output only. When the job was created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>Output only. When the job processing was completed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual object EndTime { get; set; } 

        /// <summary>Output only. The details of a failure or a cancellation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errorMessage")]
        public virtual string ErrorMessage { get; set; } 

        /// <summary>Required. The user-specified id of the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobId")]
        public virtual string JobId { get; set; } 

        /// <summary>Input parameters to create a prediction job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictionInput")]
        public virtual GoogleCloudMlV1beta1PredictionInput PredictionInput { get; set; } 

        /// <summary>The current prediction job result.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictionOutput")]
        public virtual GoogleCloudMlV1beta1PredictionOutput PredictionOutput { get; set; } 

        /// <summary>Output only. When the job processing was started.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual object StartTime { get; set; } 

        /// <summary>Output only. The detailed state of a job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("state")]
        public virtual string State { get; set; } 

        /// <summary>Input parameters to create a training job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trainingInput")]
        public virtual GoogleCloudMlV1beta1TrainingInput TrainingInput { get; set; } 

        /// <summary>The current training job result.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trainingOutput")]
        public virtual GoogleCloudMlV1beta1TrainingOutput TrainingOutput { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for the ListJobs method.</summary>
    public class GoogleCloudMlV1beta1ListJobsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of jobs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobs")]
        public virtual System.Collections.Generic.IList<GoogleCloudMlV1beta1Job> Jobs { get; set; } 

        /// <summary>Optional. Pass this token as the `page_token` field of the request for a subsequent call.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for the ListModels method.</summary>
    public class GoogleCloudMlV1beta1ListModelsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of models.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("models")]
        public virtual System.Collections.Generic.IList<GoogleCloudMlV1beta1Model> Models { get; set; } 

        /// <summary>Optional. Pass this token as the `page_token` field of the request for a subsequent call.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for the ListVersions method.</summary>
    public class GoogleCloudMlV1beta1ListVersionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Optional. Pass this token as the `page_token` field of the request for a subsequent call.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The list of versions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("versions")]
        public virtual System.Collections.Generic.IList<GoogleCloudMlV1beta1Version> Versions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Options for manually scaling a model.</summary>
    public class GoogleCloudMlV1beta1ManualScaling : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of nodes to allocate for this model. These nodes are always up, starting from the time
        /// the model is deployed, so the cost of operating this model will be proportional to nodes * number of hours
        /// since deployment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nodes")]
        public virtual System.Nullable<int> Nodes { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a machine learning solution.
    ///
    /// A model can have multiple versions, each of which is a deployed, trained model ready to receive prediction
    /// requests. The model itself is just a container.</summary>
    public class GoogleCloudMlV1beta1Model : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Output only. The default version of the model. This version will be used to handle prediction
        /// requests that do not specify a version.
        ///
        /// You can change the default version by calling [projects.methods.versions.setDefault](/ml/reference/rest/v1be
        /// ta1/projects.models.versions/setDefault).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultVersion")]
        public virtual GoogleCloudMlV1beta1Version DefaultVersion { get; set; } 

        /// <summary>Optional. The description specified for the model when it was created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Required. The name specified for the model when it was created.
        ///
        /// The model name must be unique within the project it is created in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Optional. If true, enables StackDriver Logging for online prediction. Default is false.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("onlinePredictionLogging")]
        public virtual System.Nullable<bool> OnlinePredictionLogging { get; set; } 

        /// <summary>Optional. The list of regions where the model is going to be deployed. Currently only one region
        /// per model is supported. Defaults to 'us-central1' if nothing is set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regions")]
        public virtual System.Collections.Generic.IList<string> Regions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents the metadata of the long-running operation.</summary>
    public class GoogleCloudMlV1beta1OperationMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The time the operation was submitted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>The time operation processing completed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual object EndTime { get; set; } 

        /// <summary>Indicates whether a request to cancel this operation has been made.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isCancellationRequested")]
        public virtual System.Nullable<bool> IsCancellationRequested { get; set; } 

        /// <summary>Contains the name of the model associated with the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("modelName")]
        public virtual string ModelName { get; set; } 

        /// <summary>The operation type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationType")]
        public virtual string OperationType { get; set; } 

        /// <summary>The time operation processing started.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual object StartTime { get; set; } 

        /// <summary>Contains the version associated with the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual GoogleCloudMlV1beta1Version Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a single hyperparameter to optimize.</summary>
    public class GoogleCloudMlV1beta1ParameterSpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required if type is `CATEGORICAL`. The list of possible categories.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoricalValues")]
        public virtual System.Collections.Generic.IList<string> CategoricalValues { get; set; } 

        /// <summary>Required if type is `DISCRETE`. A list of feasible points. The list should be in strictly
        /// increasing order. For instance, this parameter might have possible settings of 1.5, 2.5, and 4.0. This list
        /// should not contain more than 1,000 values.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("discreteValues")]
        public virtual System.Collections.Generic.IList<System.Nullable<double>> DiscreteValues { get; set; } 

        /// <summary>Required if typeis `DOUBLE` or `INTEGER`. This field should be unset if type is `CATEGORICAL`. This
        /// value should be integers if type is `INTEGER`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxValue")]
        public virtual System.Nullable<double> MaxValue { get; set; } 

        /// <summary>Required if type is `DOUBLE` or `INTEGER`. This field should be unset if type is `CATEGORICAL`.
        /// This value should be integers if type is INTEGER.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minValue")]
        public virtual System.Nullable<double> MinValue { get; set; } 

        /// <summary>Required. The parameter name must be unique amongst all ParameterConfigs in a HyperparameterSpec
        /// message. E.g., "learning_rate".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameterName")]
        public virtual string ParameterName { get; set; } 

        /// <summary>Optional. How the parameter should be scaled to the hypercube. Leave unset for categorical
        /// parameters. Some kind of scaling is strongly recommended for real or integral parameters (e.g.,
        /// `UNIT_LINEAR_SCALE`).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("scaleType")]
        public virtual string ScaleType { get; set; } 

        /// <summary>Required. The type of the parameter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request for predictions to be issued against a trained model.
    ///
    /// The body of the request is a single JSON object with a single top-level field:
    ///
    /// instances A JSON array containing values representing the instances to use for prediction.
    ///
    /// The structure of each element of the instances list is determined by your model's input definition. Instances
    /// can include named inputs or can contain only unlabeled values.
    ///
    /// Not all data includes named inputs. Some instances will be simple JSON values (boolean, number, or string).
    /// However, instances are often lists of simple values, or complex nested lists. Here are some examples of request
    /// bodies:
    ///
    /// CSV data with each row encoded as a string value:
    ///
    /// {"instances": ["1.0,true,\\"x\\"", "-2.0,false,\\"y\\""]}
    ///
    /// Plain text:
    ///
    /// {"instances": ["the quick brown fox", "la bruja le dio"]}
    ///
    /// Sentences encoded as lists of words (vectors of strings):
    ///
    /// { "instances": [ ["the","quick","brown"], ["la","bruja","le"], ... ] }
    ///
    /// Floating point scalar values:
    ///
    /// {"instances": [0.0, 1.1, 2.2]}
    ///
    /// Vectors of integers:
    ///
    /// { "instances": [ [0, 1, 2], [3, 4, 5], ... ] }
    ///
    /// Tensors (in this case, two-dimensional tensors):
    ///
    /// { "instances": [ [ [0, 1, 2], [3, 4, 5] ], ... ] }
    ///
    /// Images can be represented different ways. In this encoding scheme the first two dimensions represent the rows
    /// and columns of the image, and the third contains lists (vectors) of the R, G, and B values for each pixel.
    ///
    /// { "instances": [ [ [ [138, 30, 66], [130, 20, 56], ... ], [ [126, 38, 61], [122, 24, 57], ... ], ... ], ... ] }
    ///
    /// JSON strings must be encoded as UTF-8. To send binary data, you must base64-encode the data and mark it as
    /// binary. To mark a JSON string as binary, replace it with a JSON object with a single attribute named `b64`:
    /// {"b64": "..."} For example:
    ///
    /// Two Serialized tf.Examples (fake data, for illustrative purposes only):
    ///
    /// {"instances": [{"b64": "X5ad6u"}, {"b64": "IA9j4nx"}]}
    ///
    /// Two JPEG image byte strings (fake data, for illustrative purposes only):
    ///
    /// {"instances": [{"b64": "ASa8asdf"}, {"b64": "JLK7ljk3"}]}
    ///
    /// If your data includes named references, format each instance as a JSON object with the named references as the
    /// keys:
    ///
    /// JSON input data to be preprocessed:
    ///
    /// { "instances": [ { "a": 1.0, "b": true, "c": "x" }, { "a": -2.0, "b": false, "c": "y" } ] }
    ///
    /// Some models have an underlying TensorFlow graph that accepts multiple input tensors. In this case, you should
    /// use the names of JSON name/value pairs to identify the input tensors, as shown in the following exmaples:
    ///
    /// For a graph with input tensor aliases "tag" (string) and "image" (base64-encoded string):
    ///
    /// { "instances": [ { "tag": "beach", "image": {"b64": "ASa8asdf"} }, { "tag": "car", "image": {"b64": "JLK7ljk3"}
    /// } ] }
    ///
    /// For a graph with input tensor aliases "tag" (string) and "image" (3-dimensional array of 8-bit ints):
    ///
    /// { "instances": [ { "tag": "beach", "image": [ [ [138, 30, 66], [130, 20, 56], ... ], [ [126, 38, 61], [122, 24,
    /// 57], ... ], ... ] }, { "tag": "car", "image": [ [ [255, 0, 102], [255, 0, 97], ... ], [ [254, 1, 101], [254, 2,
    /// 93], ... ], ... ] }, ... ] }
    ///
    /// If the call is successful, the response body will contain one prediction entry per instance in the request body.
    /// If prediction fails for any instance, the response body will contain no predictions and will contian a single
    /// error entry instead.</summary>
    public class GoogleCloudMlV1beta1PredictRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary> Required. The prediction request body.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("httpBody")]
        public virtual GoogleApiHttpBody HttpBody { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents input parameters for a prediction job.</summary>
    public class GoogleCloudMlV1beta1PredictionInput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The format of the input data files.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataFormat")]
        public virtual string DataFormat { get; set; } 

        /// <summary>Required. The Google Cloud Storage location of the input data files. May contain
        /// wildcards.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputPaths")]
        public virtual System.Collections.Generic.IList<string> InputPaths { get; set; } 

        /// <summary>Optional. The maximum number of workers to be used for parallel processing. Defaults to 10 if not
        /// specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxWorkerCount")]
        public virtual System.Nullable<long> MaxWorkerCount { get; set; } 

        /// <summary>Use this field if you want to use the default version for the specified model. The string must use
        /// the following format:
        ///
        /// `"projects/[YOUR_PROJECT]/models/[YOUR_MODEL]"`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("modelName")]
        public virtual string ModelName { get; set; } 

        /// <summary>Required. The output Google Cloud Storage location.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outputPath")]
        public virtual string OutputPath { get; set; } 

        /// <summary>Required. The Google Compute Engine region to run the prediction job in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; } 

        /// <summary>Optional. The Google Cloud ML runtime version to use for this batch prediction. If not set, Google
        /// Cloud ML will pick the runtime version used during the CreateVersion request for this model version, or
        /// choose the latest stable version when model version information is not available such as when the model is
        /// specified by uri.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("runtimeVersion")]
        public virtual string RuntimeVersion { get; set; } 

        /// <summary>Use this field if you want to specify a Google Cloud Storage path for the model to use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uri")]
        public virtual string Uri { get; set; } 

        /// <summary>Use this field if you want to specify a version of the model to use. The string is formatted the
        /// same way as `model_version`, with the addition of the version information:
        ///
        /// `"projects/[YOUR_PROJECT]/models/YOUR_MODEL/versions/[YOUR_VERSION]"`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("versionName")]
        public virtual string VersionName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents results of a prediction job.</summary>
    public class GoogleCloudMlV1beta1PredictionOutput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of data instances which resulted in errors.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errorCount")]
        public virtual System.Nullable<long> ErrorCount { get; set; } 

        /// <summary>Node hours used by the batch prediction job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nodeHours")]
        public virtual System.Nullable<double> NodeHours { get; set; } 

        /// <summary>The output Google Cloud Storage location provided at the job creation time.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outputPath")]
        public virtual string OutputPath { get; set; } 

        /// <summary>The number of generated predictions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictionCount")]
        public virtual System.Nullable<long> PredictionCount { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for the SetDefaultVersion request.</summary>
    public class GoogleCloudMlV1beta1SetDefaultVersionRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents input parameters for a training job.</summary>
    public class GoogleCloudMlV1beta1TrainingInput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Optional. Command line arguments to pass to the program.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("args")]
        public virtual System.Collections.Generic.IList<string> Args { get; set; } 

        /// <summary>Optional. The set of Hyperparameters to tune.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hyperparameters")]
        public virtual GoogleCloudMlV1beta1HyperparameterSpec Hyperparameters { get; set; } 

        /// <summary>Optional. A Google Cloud Storage path in which to store training outputs and other data needed for
        /// training. This path is passed to your TensorFlow program as the 'job_dir' command-line argument. The benefit
        /// of specifying this field is that Cloud ML validates the path for use in training.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobDir")]
        public virtual string JobDir { get; set; } 

        /// <summary>Optional. Specifies the type of virtual machine to use for your training job's master worker.
        ///
        /// The following types are supported:
        ///
        /// standard
        ///
        /// A basic machine configuration suitable for training simple models with small to moderate datasets.
        ///
        /// large_model
        ///
        /// A machine with a lot of memory, specially suited for parameter servers when your model is large (having many
        /// hidden layers or layers with very large numbers of nodes).
        ///
        /// complex_model_s
        ///
        /// A machine suitable for the master and workers of the cluster when your model requires more computation than
        /// the standard machine can handle satisfactorily.
        ///
        /// complex_model_m
        ///
        /// A machine with roughly twice the number of cores and roughly double the memory of complex_model_s.
        ///
        /// complex_model_l
        ///
        /// A machine with roughly twice the number of cores and roughly double the memory of complex_model_m.
        ///
        /// standard_gpu
        ///
        /// A machine equivalent to standard that also includes a
        ///
        /// GPU that you can use in your trainer.
        ///
        /// complex_model_m_gpu
        ///
        /// A machine equivalent to coplex_model_m that also includes four GPUs.
        ///
        /// You must set this value when `scaleTier` is set to `CUSTOM`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("masterType")]
        public virtual string MasterType { get; set; } 

        /// <summary>Required. The Google Cloud Storage location of the packages with the training program and any
        /// additional dependencies.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("packageUris")]
        public virtual System.Collections.Generic.IList<string> PackageUris { get; set; } 

        /// <summary>Optional. The number of parameter server replicas to use for the training job. Each replica in the
        /// cluster will be of the type specified in `parameter_server_type`.
        ///
        /// This value can only be used when `scale_tier` is set to `CUSTOM`.If you set this value, you must also set
        /// `parameter_server_type`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameterServerCount")]
        public virtual System.Nullable<long> ParameterServerCount { get; set; } 

        /// <summary>Optional. Specifies the type of virtual machine to use for your training job's parameter server.
        ///
        /// The supported values are the same as those described in the entry for `master_type`.
        ///
        /// This value must be present when `scaleTier` is set to `CUSTOM` and `parameter_server_count` is greater than
        /// zero.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameterServerType")]
        public virtual string ParameterServerType { get; set; } 

        /// <summary>Required. The Python module name to run after installing the packages.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pythonModule")]
        public virtual string PythonModule { get; set; } 

        /// <summary>Required. The Google Compute Engine region to run the training job in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; } 

        /// <summary>Optional. The Google Cloud ML runtime version to use for training.  If not set, Google Cloud ML
        /// will choose the latest stable version.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("runtimeVersion")]
        public virtual string RuntimeVersion { get; set; } 

        /// <summary>Required. Specifies the machine types, the number of replicas for workers and parameter
        /// servers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("scaleTier")]
        public virtual string ScaleTier { get; set; } 

        /// <summary>Optional. The number of worker replicas to use for the training job. Each replica in the cluster
        /// will be of the type specified in `worker_type`.
        ///
        /// This value can only be used when `scale_tier` is set to `CUSTOM`. If you set this value, you must also set
        /// `worker_type`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerCount")]
        public virtual System.Nullable<long> WorkerCount { get; set; } 

        /// <summary>Optional. Specifies the type of virtual machine to use for your training job's worker nodes.
        ///
        /// The supported values are the same as those described in the entry for `masterType`.
        ///
        /// This value must be present when `scaleTier` is set to `CUSTOM` and `workerCount` is greater than
        /// zero.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerType")]
        public virtual string WorkerType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents results of a training job. Output only.</summary>
    public class GoogleCloudMlV1beta1TrainingOutput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of hyperparameter tuning trials that completed successfully. Only set for hyperparameter
        /// tuning jobs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("completedTrialCount")]
        public virtual System.Nullable<long> CompletedTrialCount { get; set; } 

        /// <summary>The amount of ML units consumed by the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("consumedMLUnits")]
        public virtual System.Nullable<double> ConsumedMLUnits { get; set; } 

        /// <summary>Whether this job is a hyperparameter tuning job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isHyperparameterTuningJob")]
        public virtual System.Nullable<bool> IsHyperparameterTuningJob { get; set; } 

        /// <summary>Results for individual Hyperparameter trials. Only set for hyperparameter tuning jobs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trials")]
        public virtual System.Collections.Generic.IList<GoogleCloudMlV1beta1HyperparameterOutput> Trials { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a version of the model.
    ///
    /// Each version is a trained model deployed in the cloud, ready to handle prediction requests. A model can have
    /// multiple versions. You can get information about all of the versions of a given model by calling
    /// [projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).</summary>
    public class GoogleCloudMlV1beta1Version : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Output only. The time the version was created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>Required. The Google Cloud Storage location of the trained model used to create the version. See
        /// the [overview of model deployment](/ml/docs/concepts/deployment-overview) for more informaiton.
        ///
        /// When passing Version to
        /// [projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create) the model
        /// service uses the specified location as the source of the model. Once deployed, the model version is hosted
        /// by the prediction service, so this location is useful only as a historical record.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deploymentUri")]
        public virtual string DeploymentUri { get; set; } 

        /// <summary>Optional. The description specified for the version when it was created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Output only. If true, this version will be used to handle prediction requests that do not specify a
        /// version.
        ///
        /// You can change the default version by calling [projects.methods.versions.setDefault](/ml/reference/rest/v1be
        /// ta1/projects.models.versions/setDefault).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isDefault")]
        public virtual System.Nullable<bool> IsDefault { get; set; } 

        /// <summary>Output only. The time the version was last used for prediction.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lastUseTime")]
        public virtual object LastUseTime { get; set; } 

        /// <summary>Optional. Manually select the number of nodes to use for serving the model. If unset (i.e., by
        /// default), the number of nodes used to serve the model automatically scales with traffic. However, care
        /// should be taken to ramp up traffic according to the model's ability to scale. If your model needs to handle
        /// bursts of traffic beyond it's ability to scale, it is recommended you set this field
        /// appropriately.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("manualScaling")]
        public virtual GoogleCloudMlV1beta1ManualScaling ManualScaling { get; set; } 

        /// <summary>Required.The name specified for the version when it was created.
        ///
        /// The version name must be unique within the model it is created in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Optional. The Google Cloud ML runtime version to use for this deployment. If not set, Google Cloud
        /// ML will choose a version.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("runtimeVersion")]
        public virtual string RuntimeVersion { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response message for Operations.ListOperations.</summary>
    public class GoogleLongrunningListOperationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The standard List next-page token.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>A list of operations that matches the specified filter in the request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operations")]
        public virtual System.Collections.Generic.IList<GoogleLongrunningOperation> Operations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This resource represents a long-running operation that is the result of a network API call.</summary>
    public class GoogleLongrunningOperation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If the value is `false`, it means the operation is still in progress. If true, the operation is
        /// completed, and either `error` or `response` is available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("done")]
        public virtual System.Nullable<bool> Done { get; set; } 

        /// <summary>The error result of the operation in case of failure or cancellation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual GoogleRpcStatus Error { get; set; } 

        /// <summary>Service-specific metadata associated with the operation.  It typically contains progress
        /// information and common metadata such as create time. Some services might not provide such metadata.  Any
        /// method that returns a long-running operation should document the metadata type, if any.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string,object> Metadata { get; set; } 

        /// <summary>The server-assigned name, which is only unique within the same service that originally returns it.
        /// If you use the default HTTP mapping, the `name` should have the format of
        /// `operations/some/unique/name`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The normal response of the operation in case of success.  If the original method returns no data on
        /// success, such as `Delete`, the response is `google.protobuf.Empty`.  If the original method is standard
        /// `Get`/`Create`/`Update`, the response should be the resource.  For other methods, the response should have
        /// the type `XxxResponse`, where `Xxx` is the original method name.  For example, if the original method name
        /// is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("response")]
        public virtual System.Collections.Generic.IDictionary<string,object> Response { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A
    /// typical example is to use it as the request or the response type of an API method. For instance:
    ///
    /// service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
    ///
    /// The JSON representation for `Empty` is empty JSON object `{}`.</summary>
    public class GoogleProtobufEmpty : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The `Status` type defines a logical error model that is suitable for different programming
    /// environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model
    /// is designed to be:
    ///
    /// - Simple to use and understand for most users - Flexible enough to meet unexpected needs
    ///
    /// # Overview
    ///
    /// The `Status` message contains three pieces of data: error code, error message, and error details. The error code
    /// should be an enum value of google.rpc.Code, but it may accept additional error codes if needed.  The error
    /// message should be a developer-facing English message that helps developers *understand* and *resolve* the error.
    /// If a localized user-facing error message is needed, put the localized message in the error details or localize
    /// it in the client. The optional error details may contain arbitrary information about the error. There is a
    /// predefined set of error detail types in the package `google.rpc` which can be used for common error conditions.
    ///
    /// # Language mapping
    ///
    /// The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire
    /// format. When the `Status` message is exposed in different client libraries and different wire protocols, it can
    /// be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped
    /// to some error codes in C.
    ///
    /// # Other uses
    ///
    /// The error model and the `Status` message can be used in a variety of environments, either with or without APIs,
    /// to provide a consistent developer experience across different environments.
    ///
    /// Example uses of this error model include:
    ///
    /// - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the
    /// normal response to indicate the partial errors.
    ///
    /// - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error
    /// reporting purpose.
    ///
    /// - Batch operations. If a client uses batch request and batch response, the `Status` message should be used
    /// directly inside batch response, one for each error sub-response.
    ///
    /// - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of
    /// those operations should be represented directly using the `Status` message.
    ///
    /// - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any
    /// stripping needed for security/privacy reasons.</summary>
    public class GoogleRpcStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The status code, which should be an enum value of google.rpc.Code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<int> Code { get; set; } 

        /// <summary>A list of messages that carry the error details.  There will be a common set of message types for
        /// APIs to use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("details")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> Details { get; set; } 

        /// <summary>A developer-facing error message, which should be in English. Any user-facing error message should
        /// be localized and sent in the google.rpc.Status.details field, or localized by the client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
